package com.qdxwx.common.pdfUtils;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Map;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.Image;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;

public class VitaePdfUtils {

    private static final String splitVline = "    |    ";

    //判断是否为16进制颜色
    public static boolean isHexColor(String color) {
        String HEX_PATTERN = "[0-9A-Fa-f]+";
        return color != null && color.length() == 6 && color.matches(HEX_PATTERN);
    }
    //将16进制颜色转换为Color对象
    public static BaseColor myColor(String hexColor) {
        hexColor = hexColor.replace("#", "");
        if(hexColor.length()==3) {
            hexColor = hexColor+hexColor;
        }
        if(!isHexColor(hexColor)) {
            hexColor = "ffffff";
        }
        int r= Integer.valueOf( hexColor.substring( 0, 2 ), 16 );
        int g= Integer.valueOf( hexColor.substring( 2, 4 ), 16 );
        int b= Integer.valueOf( hexColor.substring( 4, 6 ), 16 );
        return new BaseColor(r,g,b);
    }

    /**
     * 设置字体，及大小
     */
    public static Font myfont(float size,int style) throws DocumentException, IOException {
        BaseFont bfChinese = BaseFont.createFont("STSong-Light","UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);
        return new Font(bfChinese, size, style);
    }

    public static Font myfont(float size,int style,String color) throws DocumentException, IOException {
        BaseFont bfChinese = BaseFont.createFont("STSong-Light","UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);
        com.itextpdf.text.Font myFont = new com.itextpdf.text.Font(bfChinese, size, style);
        myFont.setColor(myColor(color));
        return myFont;
    }

    /**
     * 标题一
     */
    public static Paragraph h1(String text) throws DocumentException, IOException {
        return new Paragraph(text,myfont(16,Font.BOLD));
    }

    /**
     * 带前导图的标题
     */
    public static PdfPTable add_headtitle_1(String text) throws Exception{
        PdfPTable table = new PdfPTable(2);
        // 实现单元格跨页显示
        table.setSplitLate(false);
        table.setSplitRows(true);
        //设置每列宽度比例
        int[] width_ht1 = {2,98};
        table.setWidths(width_ht1);
        table.getDefaultCell().setBorder(0);
        BufferedImage image = new BufferedImage(2, 11,BufferedImage.TYPE_INT_RGB);
        Graphics g = image.getGraphics();
        g.setColor(new Color(83, 202, 195)); // #53cac3
        g.fillRect(0, 0, 2, 11);
        Image image21 = Image.getInstance(image,null);

        PdfPCell cellHt1img=new PdfPCell();
        cellHt1img.setBorder(0);
        cellHt1img.setImage(image21);
        cellHt1img.setFixedHeight(1);
        cellHt1img.setPaddingTop(5);
        PdfPCell cellHt1Content = new PdfPCell(h1(text));
        cellHt1Content.setBorder(0);
        table.addCell(cellHt1img);
        table.addCell(cellHt1Content);
        return table;
    }

    /**
     * 空行
     */
    public static Paragraph blankRow() throws Exception{
        return new Paragraph(20f, " ", myfont(20,Font.BOLD));
    }

    /**
     * 空行
     */
    public static Paragraph blankRow(float leading) throws Exception{
        return new Paragraph(leading, " ", myfont(20,Font.BOLD));
    }

    public static PdfPCell add_cell(Object obj,float lead) throws Exception{
        PdfPCell cell = new PdfPCell(new Paragraph(obj+"",myfont(12,Font.NORMAL)));
        cell.setBorder(0);
        cell.setLeading(lead, 1);
        return cell;
    }

    public static PdfPCell add_cell(Object obj,String color,float lead) throws Exception{
        color = color==null?"#000000":color;
        PdfPCell cell = new PdfPCell(new Paragraph(obj+"",myfont(12,Font.NORMAL,color)));
        cell.setBorder(0);
        cell.setLeading(lead, 1);
        return cell;
    }

    public static PdfPCell add_cell(Object obj,TBCell tbCell) throws Exception{
        PdfPCell cell = new PdfPCell(new Paragraph(obj+"",myfont(tbCell.getFontSize(),tbCell.getFontStyle(),tbCell.getTextColor())));
        cell.setBorder(tbCell.getBorder());
        cell.setLeading(tbCell.getLead(), 1);
        if(tbCell.getBgcolor()!=null && !"".equals(tbCell.getBgcolor())) {
            cell.setBackgroundColor(myColor(tbCell.getBgcolor()));
        }
        if(tbCell.getColspan()!=0) {
            cell.setColspan(tbCell.getColspan());
        }
        if(tbCell.getRowspan()!=0) {
            cell.setRowspan(tbCell.getRowspan());
        }
        if(tbCell.getBorderColor()!=null && !"".equals(tbCell.getBorderColor())) {
            cell.setBorderColor(myColor(tbCell.getBorderColor()));
        }
        if(tbCell.getIndent()>0) {
            cell.setIndent(tbCell.getIndent());
        }
        return cell;
    }

    public static PdfPCell add_cell_speace(TBCell tbCell) throws Exception{
        PdfPCell cell = new PdfPCell(new Paragraph(" ",myfont(tbCell.getFontSize(),tbCell.getFontStyle(),tbCell.getTextColor())));
        cell.setBorder(tbCell.getBorder());
        cell.setLeading(tbCell.getLead(), 1);
        if(tbCell.getBgcolor()!=null && !"".equals(tbCell.getBgcolor())) {
            cell.setBackgroundColor(myColor(tbCell.getBgcolor()));
        }
        if(tbCell.getColspan()!=0) {
            cell.setColspan(tbCell.getColspan());
        }
        if(tbCell.getRowspan()!=0) {
            cell.setRowspan(tbCell.getRowspan());
        }
        if(tbCell.getBorderColor()!=null && !"".equals(tbCell.getBorderColor())) {
            cell.setBorderColor(myColor(tbCell.getBorderColor()));
        }
        if(tbCell.getIndent()>0) {
            cell.setIndent(tbCell.getIndent());
        }
        return cell;
    }

    /**
     * 工作经验主体方法
     */
    public static void add_workExpTable(Document doc, Map<String,String> map) throws Exception{
        PdfPTable workExpTable = new PdfPTable(1);
        // 实现单元格跨页显示
        workExpTable.setSplitLate(false);
        workExpTable.setSplitRows(true);
        int[] workExpTableWidth = {100};
        workExpTable.setWidths(workExpTableWidth);
        workExpTable.getDefaultCell().setBorder(0);
        TBCell tbcs1= TBCell.NEW().bgcolor("#fff").lead(5).borderColor("#fff").fontStyle(Font.BOLD);
        TBCell tbcs2= TBCell.NEW().bgcolor("#fff").lead(10).borderColor("#fff").colspan(2).rowspan(1).fontStyle(Font.BOLD);
        //TBCell tbcs3= TBCell.NEW().bgcolor("#fff").lead(10).borderColor("#fff").colspan(2).rowspan(1);
        TBCell tbcs4= TBCell.NEW().bgcolor("#fff").lead(10).borderColor("#fff").colspan(2).rowspan(1).indent(20);
        TBCell tbcs5= TBCell.NEW().bgcolor("#fff").lead(1).borderColor("#fff").colspan(2).rowspan(1);
        workExpTable.addCell(add_cell(map.get("workUnit"), tbcs1));
        String sbf = map.get("workDate") +
                splitVline +
                map.get("position");
        workExpTable.addCell(add_cell(sbf,tbcs4));
        workExpTable.addCell(add_cell("工作描述：",tbcs2));
        workExpTable.addCell(add_cell(map.get("workIntro"),tbcs4));
        workExpTable.addCell(add_cell_speace(tbcs5));
        doc.add(workExpTable);
        doc.add(blankRow(5));
    }

    /**
     * 项目经验主体
     */
    public static void add_projectExpTable(Document doc) throws Exception{
        PdfPTable workExpTable = new PdfPTable(1);
        // 实现单元格跨页显示
        workExpTable.setSplitLate(false);
        workExpTable.setSplitRows(true);
        int[] workExpTableWidth = {100};
        workExpTable.setWidths(workExpTableWidth);
        workExpTable.getDefaultCell().setBorder(0);
        TBCell tbcs1= TBCell.NEW().bgcolor("#eee").lead(5).borderColor("#eee").fontStyle(Font.BOLD);
        TBCell tbcs2= TBCell.NEW().bgcolor("#eee").lead(10).borderColor("#eee").colspan(2).rowspan(1).fontStyle(Font.BOLD);
        TBCell tbcs3= TBCell.NEW().bgcolor("#eee").lead(10).borderColor("#eee").colspan(2).rowspan(1);
        TBCell tbcs4= TBCell.NEW().bgcolor("#eee").lead(10).borderColor("#eee").colspan(2).rowspan(1).indent(20);
        TBCell tbcs5= TBCell.NEW().bgcolor("#eee").lead(1).borderColor("#eee").colspan(2).rowspan(1);
        workExpTable.addCell(add_cell("基于人工智能的智慧校园平台", tbcs1));
        String sbf = "项目时间：2019年11月11日0点－2019年11月20日24点" +
                splitVline +
                "担任角色：项目经理" +
                splitVline +
                "所属单位：贵州大数据研究所";
        workExpTable.addCell(add_cell(sbf,tbcs3));
        workExpTable.addCell(add_cell("项目描述：",tbcs2));
        workExpTable.addCell(add_cell("在公司参与营销中心财务系统的设计与开发",tbcs4));
        workExpTable.addCell(add_cell("个人职责：",tbcs2));
        workExpTable.addCell(add_cell("在公司参与营销中心财务系统的设计与开发。",tbcs4));
        workExpTable.addCell(add_cell_speace(tbcs5));
        doc.add(workExpTable);
        doc.add(blankRow(5));
    }

    /**
     * 教育经历
     */
    public static void add_eduExpTable(Document doc, Map<String, String> map) throws Exception{
        PdfPTable workExpTable = new PdfPTable(1);
        // 实现单元格跨页显示
        workExpTable.setSplitLate(false);
        workExpTable.setSplitRows(true);

        int[] workExpTableWidth = {100};
        workExpTable.setWidths(workExpTableWidth);
        workExpTable.getDefaultCell().setBorder(0);
        TBCell tbcs1= TBCell.NEW().bgcolor("#fff").lead(5).borderColor("#fff").fontStyle(Font.BOLD);
        //TBCell tbcs2= TBCell.NEW().bgcolor("#fff").lead(10).borderColor("#fff").colspan(2).rowspan(1).fontStyle(Font.BOLD);
        TBCell tbcs3= TBCell.NEW().bgcolor("#fff").lead(10).borderColor("#fff").colspan(2).rowspan(1);
        //TBCell tbcs4= TBCell.NEW().bgcolor("#fff").lead(10).borderColor("#fff").colspan(2).rowspan(1).indent(20);
        TBCell tbcs5= TBCell.NEW().bgcolor("#fff").lead(1).borderColor("#fff").colspan(2).rowspan(1);
        workExpTable.addCell(add_cell(map.get("finishSchool"), tbcs1));
        String sbf = "专业：" + map.get("major") +
                splitVline +
                "学制：" + map.get("learningType") +
                splitVline +
                "毕业于：" + map.get("finishDate");
        workExpTable.addCell(add_cell(sbf,tbcs3));
        workExpTable.addCell(add_cell_speace(tbcs5));
        doc.add(workExpTable);
        doc.add(blankRow(5));
    }

    /**
     * 培训经历
     */
    public static void add_trainExpTable(Document doc) throws Exception{
        PdfPTable workExpTable = new PdfPTable(1);
        // 实现单元格跨页显示
        workExpTable.setSplitLate(false);
        workExpTable.setSplitRows(true);
        int[] workExpTableWidth = {100};
        workExpTable.setWidths(workExpTableWidth);
        workExpTable.getDefaultCell().setBorder(0);
        TBCell tbcs1= TBCell.NEW().bgcolor("#eee").lead(5).borderColor("#eee").fontStyle(Font.BOLD);
        //TBCell tbcs2= TBCell.NEW().bgcolor("#eee").lead(10).borderColor("#eee").colspan(2).rowspan(1).fontStyle(Font.BOLD);
        TBCell tbcs3= TBCell.NEW().bgcolor("#eee").lead(10).borderColor("#eee").colspan(2).rowspan(1);
        //TBCell tbcs4= TBCell.NEW().bgcolor("#eee").lead(10).borderColor("#eee").colspan(2).rowspan(1).indent(20);
        TBCell tbcs5= TBCell.NEW().bgcolor("#eee").lead(1).borderColor("#eee").colspan(2).rowspan(1);
        workExpTable.addCell(add_cell("培训课程：hadoop高级工程师培训", tbcs1));
        String sbf = "时间：2015年9月-2019年7月" +
                splitVline +
                "培训机构：大数据培训中心";
        workExpTable.addCell(add_cell(sbf,tbcs3));
        workExpTable.addCell(add_cell_speace(tbcs5));
        doc.add(workExpTable);
        doc.add(blankRow(5));
    }

    /**
     * 添加说明
     */
    public static void add_ExplainExpTable(Document doc,String context) throws Exception{
        PdfPTable workExpTable = new PdfPTable(1);
        //配置单元格跨页显示
        workExpTable.setSplitLate(false);
        workExpTable.setSplitRows(true);
        int[] workExpTableWidth = {100};
        workExpTable.setWidths(workExpTableWidth);
        workExpTable.getDefaultCell().setBorder(0);
        TBCell tbcs3= TBCell.NEW().bgcolor("#fff").lead(10).borderColor("#fff").colspan(2).rowspan(1);
        TBCell tbcs5= TBCell.NEW().bgcolor("#fff").lead(1).borderColor("#fff").colspan(2).rowspan(1);
        workExpTable.addCell(add_cell(context,tbcs3));
        workExpTable.addCell(add_cell_speace(tbcs5));
        doc.add(workExpTable);
        doc.add(blankRow(5));
    }

}